package com.jian.java;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

/**
 * @author Jiange
 * @create 2021-05-27-16:07
 */

/**
 * 消息头
 *      Destination、
 *      DeliveryMode持久和非持久模式  非持久表示在服务器宕机消息就没了 队列默认是持久化的
 *          对于主题只有在设置了持久化才能连接开启 生产者和消费者都要
 *      Expiration过期时间、将timeToLive值设置成为0表示永不过期 (默认)、
 *      优先级默认是4级、
 *      id唯一的ID
 * 消息属性 用来修饰数据
 *
 * 消息体 用来装数据
 *      TextMessage
 *      MapMessage
 *      BytesMessage
 *      StreamMessage
 *      ObjectMessage 可序列化的对象
 */
public class JsmConsumer {
    public static void main(String[] args) throws JMSException {
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.48.131:61616");
        Connection connection = factory.createConnection();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//        MapMessage mapMessage = session.createMapMessage();
//        mapMessage.setStringProperty("name","建哥");
//        mapMessage.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
        Queue queue = session.createQueue("queue01");

        Topic topic = session.createTopic("");
        TopicSubscriber durableSubscriber = session.createDurableSubscriber(topic,"");
        connection.start();
        Message receive = durableSubscriber.receive();


        MessageConsumer consumer = session.createConsumer(queue);
//        while (true){
//            TextMessage message = (TextMessage) consumer.receive();
//            if(null != message){
//                System.out.println(message.getText());
//            }else{
//                break;
//            }
//        }

        consumer.setMessageListener((message)->{
            if(message != null && message instanceof TextMessage){
                TextMessage textMessage = (TextMessage) message;
                try {
                    System.out.println("textMessage = " + textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });

        /**
         * 先生产 启动一号消费者消费完了 再启动二号二号没有任何消息
         * 先启动两个消费者 在启动一个生产者 此时会平均分配消息
         */
    }
}
